package com.zwh.algorithm.foundation;

import java.util.*;

/**
 * 广发基金面试题
 */
public class Foundation2 {
    public static void main(String[] args) {
        System.out.println(lookforOne(new int[]{1,1,1,2,3,4,5,6,2,3,4,5}));
        System.out.println(waysToBuyPensPencils(2,1,2));
        System.out.println(plalindrome(1221));
        System.out.println(numberBig(new int[]{1,1,1,2,3,4,5,6,2,3,4,5},3));
    }


    /**
     * 给你一个非空数组，其中只有一个数出现了一次，其余数字出现多次，找出只出现一次的数字。
     */
    public static Integer lookforOne(int[] a){
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < a.length; i++) {
            map.put(a[i],map.getOrDefault(a[i],0)+1);
        }
        for (Integer integer : map.keySet()) {
            System.out.println(map.get(integer));
            if (Integer.valueOf(1).equals(map.get(integer))){
                return integer;
            }
        }
        return null;
    }
    /**
     * 给一个 total 整数的钱，钢笔 cost1 元铅笔 cost2 元，保证不超过总钱数下，铅笔买多少只
     * （0 只钢笔和 0 只铅笔算一种方案)，写出方案有多个。
     */
    public static long waysToBuyPensPencils(int total, int cost1, int cost2) {
        long ans = 0L;
        for(int i = 0; i <= total / cost1; i++){
            ans += (total - i * cost1) / cost2 +1;
        };
        return ans;
    }

    /**
     * 、判断一个整数是否是回文(正读倒读都是一样的) 例如 121 是回文数 而 123 不是回文数。
     */
    public static boolean plalindrome(int a){
        String s = String.valueOf(a);
        int length = s.length();
        for (int i = 0; i < length/2; i++) {
            char c = s.charAt(i);
            char c1 = s.charAt(length - i - 1);
            boolean lowerCase = Character.isLowerCase(c);
            if (c != c1){
                return false;
            }
        }
        return true;
    }
    /**
     * 无序数组输出第 n 大的数
     */
    public static int numberBig(int[] a,int b){
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        System.out.println(a.length);
        return a[a.length-b];
    }
}
